<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <!-- ASCII(0-127)  GB2312(简体中文)  GBK(简体中文+繁体)  Unicode => UTF-8 -->
</body>
<script>
    // 用户名:  由数字 字母 下划线  组成, 6-12位, 但是不能以数字开头  
    //  6-12位 限制字符出现的次数  => 限定符
    // 以非数字开头               => 定位符
    // 由数字 字母 下划线 $ 组成   => 字符需要对应的区间内

    // 字符匹配符  => (单个字符之间或的关系 用于限定字符范围)
    // [xyz]  匹配集合中x y x任意一个 (x或y或z => 单个字符之间或的关系)
    // [0-9]  匹配数字  [0123456789]
    // [a-z]  匹配小写  [qwertyuiopasdfghjklzxcvbnm]
    // [A-Z]  匹配大写  [QWERTYUIOPASDFGHJKLZXCVBNM]
    // [0-9a-zA-Z_]  匹配字母 数字 下换线

    // 字符匹配符取反:   ^用在字符匹配符的最前面表示取反
    // [^xyz]   匹配除x y z以外的任意一个
    // [^0-9]   匹配非数字  
    // [^a-z]   匹配非小写  
    // [^A-Z]   匹配非大写  
    // [^0-9a-zA-Z_]  匹配非字母 数字 下换线
`
    字符匹配符中规定的字符簇(官方规定的集合 范围)
    \d   匹配数字[0 - 9]
    \D   匹配非数字[^ 0 - 9]
    \w   匹配字母 数字 下换线[0 - 9a - zA - Z_]
    \W   匹配非字母 数字 下换线[^ 0 - 9a - zA - Z_]
    \s   匹配空白字符(包含 空格 换行符\n  回车符 \r)
    \S   匹配非空白字符(包含 空格 换行符\n  回车符 \r)
        .匹配任意字符(除换行符\n之外)
`
    // [\u4e00-\u9fa5]  匹配中文

    // 注意:
    // 字符匹配中  除了 [ ]  ^ - 字符簇以外,都是普通字符
    // [$+*?] 

    // 用户名:  由数字 字母 下划线  组成, 6-12位, 但是不能以数字开头  

    var user = "a123123";

    // var reg = /^[0-9a-zA-Z_]{6,12}$/;   // 由数字 字母 下划线  组成, 6-12位
    // var reg = /^[^0-9][0-9a-zA-Z_]{5,11}$/;   // 由数字 字母 下划线  组成, 6-12位 ,不能以数字开头 
    // var reg = /^[a-zA-Z_][0-9a-zA-Z_]{5,11}$/;   // 由数字 字母 下划线  组成, 6-12位 ,不能以数字开头 
    // var reg = /^[a-zA-Z_][0-9a-zA-Z_\u4e00-\u9fa5]{5,11}$/;   // 由数字 字母 下划线 中文  组成, 6-12位 ,不能以数字开头 
    var reg = /^[a-zA-Z_\u4e00-\u9fa5][\w\u4e00-\u9fa5]{5,11}$/;   // 由数字 字母 下划线 中文 组成, 6-12位 ,不能以数字开头 

    var reg = /^[a-zA-Z_$][\w$]{5,11}$/;   // 由数字 字母 下划线 中文 组成, 6-12位 ,不能以数字开头 

    console.log(reg.test(user));
</script>

</html>